package com.miaoxun.web.util;

import com.miaoxun.domain.enums.ErrEnum;
import com.miaoxun.domain.exception.ThException;
import com.miaoxun.common.util.Constant;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class FileUtil {
    public static String saveFile(MultipartFile file,String ip) throws Exception {
        String SUB=GetSUB(file);
        if ("".equalsIgnoreCase(SUB))
            throw new ThException(ErrEnum.FILE_ERR);
        String fileName = UUID.randomUUID().toString() + file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."), file.getOriginalFilename().length());
        if (!file.isEmpty()) {
            try {
                File f = new File(Constant.FILE_ROOT + File.separator + SUB);
                if (!f.exists())
                    f.mkdirs();
                Files.copy(file.getInputStream(), Paths.get(Constant.FILE_ROOT, SUB, fileName));
            } catch (IOException | RuntimeException e) {
                throw new ThException(ErrEnum.FILE_ERR);
            }
        }
        return ip  + SUB + File.separator + fileName;
    }
    private static String GetSUB(MultipartFile file) throws ThException {
         if (file.getContentType().startsWith("image"))
         {
             return  Constant.FILE_IMG+File.separator+new SimpleDateFormat("yyyy-MM-dd").format(new Date());
         }
        if (file.getContentType().startsWith("text"))
        {
            return  Constant.FILE_TXT;
        }
        if (file.getContentType().startsWith("application"))
        {
            if (!IS_SUPPORT(file.getOriginalFilename()) )
                 throw new   ThException(ErrEnum.FILE_ERR);
            return  Constant.APPLICATION;
        }
         return  "";
    }

    /**
     * 不支持可执行文件
     * @param fileName
     * @return
     */

    private  static  boolean  IS_SUPPORT(String fileName){
        if (fileName==null)
            return false;
        if ("".equalsIgnoreCase(fileName))
            return false;
        if (fileName.endsWith(".sh"))
            return false;
        if (fileName.endsWith(".exe"))
            return false;
        if (fileName.endsWith(".zip"))
            return false;
        if (fileName.endsWith(".rar"))
            return false;
        if (fileName.endsWith(".msi"))
            return false;
        if (fileName.endsWith(".sql"))
            return false;

        return  true;
    }


}
